#ifndef POW_CUSTOM_TILING_H
#define POW_CUSTOM_TILING_H
#include "register/tilingdata_base.h"

namespace optiling {
BEGIN_TILING_DATA_DEF(TilingData)

   TILING_DATA_FIELD_DEF(uint64_t, smallCoreDataNum);
    // 定义大核（Big Core）处理的数据量（单位：元素数）
    TILING_DATA_FIELD_DEF(uint64_t, bigCoreDataNum);
    // 定义大核最终处理的完整分块（Tile）数量
    TILING_DATA_FIELD_DEF(uint64_t, finalBigTileNum);
    // 定义小核最终处理的完整分块（Tile）数量
    TILING_DATA_FIELD_DEF(uint64_t, finalSmallTileNum);
    // 定义每个分块（Tile）包含的数据量（单位：元素数）
    TILING_DATA_FIELD_DEF(uint64_t, tileDataNum);
    // 定义小核处理的尾块数据量（总数据无法整除分块大小时的剩余部分）
    TILING_DATA_FIELD_DEF(uint64_t, smallTailDataNum);
    // 定义大核处理的尾块数据量（总数据无法整除分块大小时的剩余部分）
    TILING_DATA_FIELD_DEF(uint64_t, bigTailDataNum);
    // 定义尾块的总数量
    TILING_DATA_FIELD_DEF(uint64_t, tailBlockNum);

    TILING_DATA_FIELD_DEF(int32_t, x_dtype);//输入0的数据类型
    TILING_DATA_FIELD_DEF(int32_t, y_dtype);//输入1的数据类型
    TILING_DATA_FIELD_DEF(int32_t, z_dtype);//输出的数据类型
    //兼容标量
    TILING_DATA_FIELD_DEF(bool , is_input0_scalar);//输入0是否是标量
    TILING_DATA_FIELD_DEF(bool , is_input1_scalar);//输入1是否是标量
    
    //广播
    TILING_DATA_FIELD_DEF(uint32_t, yDim);
    TILING_DATA_FIELD_DEF(uint32_t, isSameX1);
    TILING_DATA_FIELD_DEF(uint32_t, isSameX2);
    TILING_DATA_FIELD_DEF_ARR(uint32_t, 10, strideX1);
    TILING_DATA_FIELD_DEF_ARR(uint32_t, 10, strideX2);
    TILING_DATA_FIELD_DEF_ARR(uint32_t, 10, strideY);
    TILING_DATA_FIELD_DEF(uint32_t, X1TotalNum);
    TILING_DATA_FIELD_DEF(uint32_t, X2TotalNum); 


END_TILING_DATA_DEF;

REGISTER_TILING_DATA_CLASS(PowCustom, TilingData)
}
#endif 
